﻿/*
 * Array.h
 *
 *  Created on: 2011/05/28
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_ARRAY_H
#define INCLUDED_NTENGINE_ARRAY_H

namespace NTEngine {

/**
 * @brief 配列
 */
template< class T > class Array {
public:
	/**
	 * @brief デフォルト
	 */
	Array();

	/**
	 * @brief サイズ指定、要素はデフォルト値
	 */
	explicit Array( int size );

	/**
	 * @brief サイズ指定、初期要素を渡す
	 */
	explicit Array( int size, const T& );

	// デストラクタ
	~Array();

	/**
	 * @brief 添え字検索（constあり）
	 */
	const T& operator[]( int i ) const;

	/**
	 * @brief 添え字検索（constなし）
	 */
	T& operator[]( int i );

	/**
	 * @brief 配列サイズを設定。クリアしてから使う
	 */
	void setSize( int size );

	/**
	 * @brief 配列サイズを取得
	 */
	int size() const;

	/**
	 * @brief配列の削除
	 */
	void clear();

private:
	Array( const Array& ); // 禁止
	void operator=( const Array& ); // 禁止

	T* m_Elements;
	int m_Size;
};

} // namespace NTEngine

#include "NTEngine/Base/Impl/ArrayImpl.h"

#endif // INCLUDED_NTENGINE_ARRAY_H
